package org.chen.service.impl;

import com.hankcs.hanlp.HanLP;
import lombok.extern.slf4j.Slf4j;
import org.chen.model.mongodb.ArticleDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

// 2. 创建关键字提取服务
@Service
@Slf4j
public class KeywordExtractService {

    @Value("${keyword.max-count}")
    private int maxKeywordCount; // 每篇文章最多提取的关键字数量

    /**
     * 从文章内容中提取关键字
     */
    public List<String> extractKeywords(ArticleDocument article) {
        // 1. 合并所有需要提取关键字的文本
        StringBuilder content = new StringBuilder();
        // 添加标题（权重高）
        content.append(article.getTitle()).append(" ");
        //判断导语是否为空
        if (article.getLeadParagraphs() != null) {
            // 添加导语
            article.getLeadParagraphs().forEach(p -> content.append(p).append(" "));
        }else {
            content.append(article.getContentHtml()).append(" ");
        }

        // 2. 使用HanLP提取关键词
        List<String> keywords = HanLP.extractKeyword(content.toString(), maxKeywordCount);

        // 3. 过滤和规范化关键词
        return keywords.stream()
                .filter(this::isValidKeyword)
                .collect(Collectors.toList());
    }

    private boolean isValidKeyword(String keyword) {
        // 关键词验证规则
        return keyword != null
            && keyword.length() >= 2
            && keyword.length() <= 20;
    }
}
